#include "Algorytm.h"
using namespace std;

Algorytm::Algorytm(Struktura struktura){
	//Struktura struktura = Struktura(220); //TO DO
	char* ciag = new char[struktura.rozmiar];
	char* tab = new char[4];


	tab[0] = 'G';
	tab[1] = 'A';
	tab[2] = 'C';
	tab[3] = 'U';

	srand(time(0));
	for (int i = 0; i < struktura.rozmiar; i++)
	{
		ciag[i] = tab[rand()%4];
	}

	for (int i = 0; i < struktura.rozmiar; i++)
	{
		Wiazanie wiazanie = struktura.getWiazanie(i);
		Wiazanie wiazanie_pop;
		Wiazanie wiazanie_nast;
		if (i > 0)
		{
			wiazanie_pop = struktura.getWiazanie(i-1);
		}
		if (i < struktura.rozmiar)
		{
			wiazanie_nast = struktura.getWiazanie(i+1);
		}

		int tmp = rand()%4;

		ciag[i] = tab[tmp];


		if (wiazanie.nukleo[1] != 0)
		{
			ciag[wiazanie.nukleo[1]-1] = tab[(tmp+2)%4];
		}
		else
		{
			if ((wiazanie_pop.nukleo[1] !=0) and (wiazanie_nast.nukleo[1] == 0))  //brzydkie ale nie mialem lepszego pomyslu narazie
			{
				if ((ciag[i] == 'A') and (ciag[wiazanie_pop.nukleo[1]-2] == 'U'))
				{
					ciag[i] == (rand()*2)%4;
				}
				else if ((ciag[i] == 'U') and (ciag[wiazanie_pop.nukleo[1]-2] == 'A'))
				{
					ciag[i] == (rand()*2)%4;
				}
				else if ((ciag[i] == 'G') and (ciag[wiazanie_pop.nukleo[1]-2] == 'C'))
				{
					ciag[i] == (rand()*2+1)%4;
				}
				else if ((ciag[i] == 'C') and (ciag[wiazanie_pop.nukleo[1]-2] == 'G'))
				{
					ciag[i] == (rand()*2+1)%4;
				}
			}
			if ((wiazanie_nast.nukleo[1] !=0) and (wiazanie_pop.nukleo[1] ==0))
			{
				if ((ciag[i] == 'A') and (ciag[wiazanie_nast.nukleo[1]] == 'U'))
				{
					ciag[i] == (rand()*2)%4;
				}
				else if ((ciag[i] == 'U') and (ciag[wiazanie_nast.nukleo[1]] == 'A'))
				{
					ciag[i] == (rand()*2)%4;
				}
				else if ((ciag[i] == 'G') and (ciag[wiazanie_nast.nukleo[1]] == 'C'))
				{
					ciag[i] == (rand()*2+1)%4;
				}
				else if ((ciag[i] == 'C') and (ciag[wiazanie_nast.nukleo[1]] == 'G'))
				{
					ciag[i] == (rand()*2+1)%4;
				}
			}
		}

	}

	/*for (int i = 0; i < struktura.rozmiar; i++) //petla testowa
	{

		Wiazanie wiazanie = struktura.getWiazanie(i);
		Wiazanie wiazanie_pop;
		Wiazanie wiazanie_nast;
		if (i > 0)
		{
			wiazanie_pop = struktura.getWiazanie(i-1);
		}
		if (i < struktura.rozmiar)
		{
			wiazanie_nast = struktura.getWiazanie(i+1);
		}
		if (wiazanie.nukleo[1] != 0)
		{
		cout << wiazanie.nukleo[0] << " , " << wiazanie.nukleo[1] << " , "<< ciag[wiazanie.nukleo[0]-1] << " , " << ciag[wiazanie.nukleo[1]-1];
		}
		else
		{
			cout << wiazanie.nukleo[0] << " , " << wiazanie.nukleo[1] << " , "<< ciag[wiazanie.nukleo[0]-1] << " , ";
			if (wiazanie_pop.nukleo[1] != 0)
			{
				cout << " pop " << wiazanie_pop.nukleo[1]-1 << " , " << ciag[wiazanie_pop.nukleo[1]-2];
			}
			if (wiazanie_nast.nukleo[1] != 0)
			{
				cout << " nast " << wiazanie_nast.nukleo[1]+1 << " , " << ciag[wiazanie_nast.nukleo[1]];
			}
		}
		cout << "\n";
	}*/

	ofstream wyj;
	if (!wyj){
		wyj << "Podano nieprawiłową nazwę pliku wyjściowego.\n";
	}
	else
	{
		wyj.open("mdv1.seq");
		wyj << ">MDV-1 (-) RNA";
		for (int i = 0; i < struktura.rozmiar; i++) //petla wynikowa
		{
			if(i%70 == 0)
			{
				wyj << endl;
			}
			wyj << ciag[i];
		}
		wyj << flush;
		wyj.close();
	}





}




